package com.system.borrow;

import android.app.Application;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer;
import com.system.borrow.bean.GloData;
import com.system.borrow.http.model.HttpHeaders;
import com.system.borrow.http.model.HttpParams;
import com.system.borrow.http.store.PersistentCookieStore;
import com.system.borrow.http.utils.OkHttpUtils;
import com.tencent.smtt.sdk.QbSdk;

import cn.jpush.android.api.JPushInterface;


/**
 * ================================================
 * 作    者：LuCenly(落尘)
 * 版    本：1.0
 * 创建日期：2016/11/17 22:36
 * 描    述：TODO
 * ================================================
 */
public class MyApplication extends Application{
    public static ImageLoader imageLoader;
    DisplayImageOptions options;
    public static DisplayImageOptions long_options;
    @Override
    public void onCreate() {
        initOKHttp();//初始化网络
        initImageLoader();//初始化图片加载
        initLongDisplay();
        JPushInterface.setDebugMode(true);
        JPushInterface.init(this);
        QbSdk.canLoadX5(this);
        super.onCreate();
    }


    public void initLongDisplay(){
        long_options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.load_fail_long)// 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.load_fail_long) // 设置图片加载/解码过程中错误时候显示的图片
                .showImageOnLoading(R.drawable.load_ing_long)
                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
                .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
                .considerExifParams(true) // 是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)// 设置图片以如何的编码方式显示
                // .decodingOptions(BitmapFactory.Options
                // decodingOptions)//设置图片的解码配置
                .delayBeforeLoading(0)// int delayInMillis为你设置的下载前的延迟时间
                // 设置图片加入缓存前，对bitmap进行设置
                // .preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置，复位
//				.displayer(new SimpleBitmapDisplayer())// 是否图片加载好后渐入的动画时间，可能会出现闪动
                .displayer(new FadeInBitmapDisplayer(1000))
                .build();
    }
    private void initImageLoader() {
        imageLoader = ImageLoader.getInstance();
        options = new DisplayImageOptions.Builder().showImageForEmptyUri(R.drawable.load_fail)// 设置图片Uri为空或是错误的时候显示的图片
                .showImageOnFail(R.drawable.load_fail) // 设置图片加载/解码过程中错误时候显示的图片
                .showImageOnLoading(R.drawable.load_ing)
                .cacheInMemory(true)// 设置下载的图片是否缓存在内存中
                .cacheOnDisk(true)// 设置下载的图片是否缓存在SD卡中
                .considerExifParams(true) // 是否考虑JPEG图像EXIF参数（旋转，翻转）
                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)// 设置图片以如何的编码方式显示
                // .decodingOptions(BitmapFactory.Options
                // decodingOptions)//设置图片的解码配置
                .delayBeforeLoading(0)// int delayInMillis为你设置的下载前的延迟时间
                // 设置图片加入缓存前，对bitmap进行设置
                // .preProcessor(BitmapProcessor preProcessor)
                .resetViewBeforeLoading(true)// 设置图片在下载前是否重置，复位
//				.displayer(new SimpleBitmapDisplayer())// 是否图片加载好后渐入的动画时间，可能会出现闪动
                .displayer(new FadeInBitmapDisplayer(1000))
                .build();
        //初始化图片下载组件
        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .diskCacheSize(50 * 1024 * 1024)
                .diskCacheFileCount(200)
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .defaultDisplayImageOptions(options)
                .build();
        imageLoader.init(config);
    }
    /**
     * 初始化OKHttp
     */
    public void initOKHttp() {
        HttpHeaders headers = new HttpHeaders();
        headers.put("commonHeaderKey1", "commonHeaderValue1"); // 所有的 header 都
        // 不支持 中文
        headers.put("commonHeaderKey2", "commonHeaderValue2");
        HttpParams params = new HttpParams();
        params.put("commonParamsKey1", "commonParamsValue1"); // 所有的 params 都 支持
        // 中文
        params.put("commonParamsKey2", "这里支持中文参数");
        if(GloData.getCustomerDTO()!=null){
            params.put("tokenid",GloData.getCustomerDTO().getId()+"");
        }

        // 必须调用初始化
        OkHttpUtils.init(this);
        // 以下都不是必须的，根据需要自行选择
        OkHttpUtils.getInstance()//
                .debug("OkHttpUtils") // 是否打开调试
                .setConnectTimeout(OkHttpUtils.DEFAULT_MILLISECONDS) // 全局的连接超时时间
                .setReadTimeOut(OkHttpUtils.DEFAULT_MILLISECONDS) // 全局的读取超时时间
                .setWriteTimeOut(OkHttpUtils.DEFAULT_MILLISECONDS) // 全局的写入超时时间
                // .setCookieStore(new MemoryCookieStore())
                // //cookie使用内存缓存（app退出后，cookie消失）
                .setCookieStore(new PersistentCookieStore()) // cookie持久化存储，如果cookie不过期，则一直有效
				.addCommonHeaders(headers); // 设置全局公共头
//				.addCommonParams(params); // 设置全局公共参数
    }
}
